﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Apollo.TokenUtils
{
    public enum TokenType
    {
        ILLEGAL = 0,  // illegal
        EOF,          // eof
        IDENTIFIER,   // identifier
        INTEGER,      // integer
        FLOAT,        // float
        STRING,       // string
        ASSIGN,       // =
        PLUS,         // +
        PLUS_ASSIGN,  // +=
        PLUS_PLUS,    // ++
        MINUS,        // -
        MINUS_ASSIGN, // -=
        MINUS_MINUS,  // --
        ASTERISK,     // *
        ASTERISK_ASSIGN,  // *=
        SLASH,            // /
        SLASH_ASSIGN,     // /=
        MODULO,           // %
        MODULO_ASSIGN,    // %=
        ASTERISK_ASSTERISK,   // **
        LT,           // <
        GT,           // >
        LE,           // <=
        GE,           // >=
        EQ,           // ==
        NE,           // !=
        AND,          // &&
        OR,           // ||
        NOT,          // !
        COMMA,        // ,
        SEMICOLON,    // ;
        COLON,        // :
        LPAREN,       // (
        RPAREN,       // )
        LBRACKET,     // [
        RBRACKET,     // ]
        LBRACE,       // {
        RBRACE,       // }
        DOT,          // .
        TILDE,        // ~
        AT,           // @
        FUNCTION,     // func
        NULL,         // null
        TRUE,         // true
        FALSE,        // false
        IF,           // if
        ELSE,         // else
        RETURN,       // return
        BREAK,        // break
        CONTINUE,     // continue
        WHILE,        // while
        FOR,          // for
        IN,           // in
        QUESTION,     // ?
        BIT_AND,      // &
        BIT_OR,       // |
        BIT_XOR,      // ^
        BIT_AND_ASSIGN,   // &=
        BIT_OR_ASSIGN,    // |=
        BIT_XOR_ASSIGN,   // ^=
        BIT_RIGHT_SHIFT,  // <<
        BIT_LEFT_SHIFT,   // >>
        SWITCH,           // switch
        CASE,             // case
        DEFAULT,          // default
        CLASS,            // class
        THIS,             // this
        SUPER,            // super
        FROM,             // from
        IMPORT,           // import
        AS,               // as
        ASYNC,            // async
        DEFER,            // defer
    }


    /* ------------------------------------------------------------------------------
     * 1 运算符
     * 1.1  算术运算符 + - * /
     * 1.2  赋值运算符 = += -= *= /= %= &= |= ^=
     * 1.3  逻辑运算符 && || ！ 
     * 1.4  比较运算符 == != > >= < <= 
     * 1.5  位运算符 & | ^ ~ << >>
     * 1.6  三元运算符 ?
     * 1.7  后缀运算符 ++ -- 
     * 
     * 2 字面量
     * 2.1  整数  123
     * 2.2  浮点数 1.23, 1.2e10, 1.3E10
     * 2.3  字符串  “Hello, World”
     * 
     * 3 关键字
     * 3.1  空值 null
     * 3.2  布尔 true false
     * 3.2  条件判断 if / else
     * 3.3  循环  for/while
     * 3.4  分支  switch/case/default
     * 3.5  函数 func
     * 3.6  类 class
     * 3.7  导入包 from/import/as
     * 3.8  return
     * 3.9  break
     * 3.10 continue
     * 3.11 this
     * 
     * 4 标识符
     * 4.1  用户定义 变量名 函数名 类名
     * 4.2  内建函数 print type exit int float float str
     * 
     * 5 分隔符
     * 5.1  分号 ;
     * 5.2  冒号 :
     * 5.3  逗号 ,
     * 5.4  小括号 ()
     * 5.5  中括号 []
     * 5.6  大括号 { }
     *
     * 
     * ------------------------------------------------------------------------------
     */
}
